package pe.com.hatunsol.hatun_android;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;


import com.google.android.gms.maps.SupportMapFragment;
import com.google.gson.Gson;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import pe.com.hatunsol.hatun_android.dialogframent.AceptarDialogfragment;
import pe.com.hatunsol.hatun_android.dialogframent.ProgressDialogFragment;
import pe.com.hatunsol.hatun_android.entity.RestResult;
import pe.com.hatunsol.hatun_android.rest.RestClient;
import pe.com.hatunsol.hatun_android.utilitario.Util;
import pe.com.hatunsol.hatun_android.entity.Parametro;
import pe.com.hatunsol.hatun_android.entity.Persona;
import pe.com.hatunsol.hatun_android.model.Distrito;
import pe.com.hatunsol.hatun_android.model.ListDistrito;
import pe.com.hatunsol.hatun_android.model.ListParametro;
import pe.com.hatunsol.hatun_android.model.ListProveedorLocal;
import pe.com.hatunsol.hatun_android.entity.ProveedorLocal;
import pe.com.hatunsol.hatun_android.rest.PostExecuteCallback;
import pe.com.hatunsol.hatun_android.rest.PostRestTask;
import pe.com.hatunsol.hatun_android.rest.PreExecuteCallback;
import pe.com.hatunsol.hatun_android.rest.RestTask;


/**
 * Created by Sistemas on 04/02/2015.
 */
public class RegContactoActivity extends ActionBarActivity implements AceptarDialogfragment.AceptarDialogfragmentListener {
    private Spinner spEstadoCivil, spDistrito;
    private AutoCompleteTextView atEstablecimientos;
    private Button btRegistrar;
    private EditText etNombres, etObra, etCorreo, etApePaterno, etApeMaterno, etDNI, etTelefonos, etDireccion, etReferencia;
    private ProgressDialog dialog;
    private ProveedorLocal provLocal;
    private ListProveedorLocal lstProveedorLocal;
    //private String Direccion_WCF="http://www.hatunsol.com.pe/ws_hatun/";

    private ProgressDialogFragment mProgressDialogFragment;
    @Override

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.regcontacto_screen);

        //Capturar Componentes
        spEstadoCivil = (Spinner) findViewById(R.id.spEstadoCivil);
        spDistrito = (Spinner) findViewById(R.id.spDistrito);
        atEstablecimientos = (AutoCompleteTextView) findViewById(R.id.atEstablecimientos);
        btRegistrar = (Button) findViewById(R.id.btRegistrar);

        etNombres = (EditText) findViewById(R.id.etNombres);
        etApePaterno = (EditText) findViewById(R.id.etApePaterno);
        etApeMaterno = (EditText) findViewById(R.id.etApeMaterno);
        etDNI = (EditText) findViewById(R.id.etDNI);
        etTelefonos = (EditText) findViewById(R.id.etTelefonos);
        etDireccion = (EditText) findViewById(R.id.etDireccion);
        etReferencia = (EditText) findViewById(R.id.etReferencia);
        etObra = (EditText) findViewById(R.id.etObra);
        etCorreo = (EditText) findViewById(R.id.etCorreo);


        cargarEstadoCivil();
        cargarDistritos();
        cargarEstablecimientos();

        btRegistrar.setOnClickListener(btRegistraronOnClickListener);
        atEstablecimientos.setOnItemClickListener(atEstablecimientosOnItemClickListener);

        dialog = new ProgressDialog(this);
        dialog.setMessage("Registrando...");
        dialog.setTitle("Registrar Contactos");
        dialog.isIndeterminate();
        dialog.setCancelable(false);


    }

    AdapterView.OnItemClickListener atEstablecimientosOnItemClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            provLocal = (ProveedorLocal) parent.getItemAtPosition(position);

        }
    };


    View.OnClickListener btRegistraronOnClickListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (etNombres.getText().toString().equals("") || etApePaterno.getText().toString().equals("")
                    || etApeMaterno.getText().toString().equals("") || etDNI.getText().toString().equals("")
                    || etDireccion.getText().toString().equals("") || etReferencia.getText().toString().equals("")
                    || etTelefonos.getText().toString().equals("") || atEstablecimientos.getText().toString().equals("")
                    || etObra.getText().toString().equals("")) {

                AceptarDialogfragment confirmacionDialogfragment = new AceptarDialogfragment();
                confirmacionDialogfragment.setMensaje("Ingrese todos los campos necesarios.");
                confirmacionDialogfragment.setmConfirmacionDialogfragmentListener(RegContactoActivity.this);
                confirmacionDialogfragment.show(getSupportFragmentManager(), AceptarDialogfragment.TAG);

            }
            else if(etDNI.getText().toString().length()!=8){
                AceptarDialogfragment confirmacionDialogfragment = new AceptarDialogfragment();
                confirmacionDialogfragment.setMensaje("Ingrese los 8 Dígitos del DNI.");
                confirmacionDialogfragment.setmConfirmacionDialogfragmentListener(RegContactoActivity.this);
                confirmacionDialogfragment.show(getSupportFragmentManager(), AceptarDialogfragment.TAG);
                etDNI.requestFocus();

            }
            else {

                new RegistrarContactoAsyncTask().execute();
            }
        }
    };


    class RegistrarContactoAsyncTask extends AsyncTask<Void, Void, RestResult> {

        @Override
        protected void onPostExecute(RestResult restResult) {
            super.onPostExecute(restResult);
            mProgressDialogFragment.dismissAllowingStateLoss();
            //Log.d("statusCode", restResult.getStatusCode() + "");
            //Log.d("result",restResult.getResult()+"");


            try {
                JSONObject jsonobj = new JSONObject(restResult.getResult());
                String PersonaId=jsonobj.getString("PersonaId");
                AceptarDialogfragment confirmacionDialogfragment = new AceptarDialogfragment();
                confirmacionDialogfragment.setmConfirmacionDialogfragmentListener(RegContactoActivity.this);
                if(PersonaId.equals("0")) {


                    confirmacionDialogfragment.setMensaje("El Cliente ya se encuentra en Proceso de Evaluación.");
                    confirmacionDialogfragment.show(getSupportFragmentManager(), AceptarDialogfragment.TAG);

                }
                else if(PersonaId.equals("error")){
                    confirmacionDialogfragment.setMensaje("Error al Registrar Contacto");

                    confirmacionDialogfragment.show(getSupportFragmentManager(), AceptarDialogfragment.TAG);
                }
                else{

                    confirmacionDialogfragment.setMensaje("Contacto Registrado Correctamente");
                    confirmacionDialogfragment.show(getSupportFragmentManager(), AceptarDialogfragment.TAG);
                    LimpiarCampos();
                    etNombres.requestFocus();

                }


            } catch (JSONException e) {
                e.printStackTrace();
            }


        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialogFragment = new ProgressDialogFragment();
            mProgressDialogFragment.setMensaje("Registrando..");
            mProgressDialogFragment.show(getFragmentManager(), ProgressDialogFragment.TAG);
        }

        @Override
        protected RestResult doInBackground(Void... params) {
            StringEntity stringEntity=null;
            JSONObject jsonObject=new JSONObject();
            try{
                jsonObject.put("DocumentoNum", etDNI.getText().toString().trim());
                jsonObject.put("LocalId", Util.BE_DatosUsuario.getLocalId());
                jsonObject.put("ProveedorLocalId", provLocal.getProveedorLocalId());
                jsonObject.put("Nombre", etNombres.getText().toString());
                jsonObject.put("ApePaterno", etApePaterno.getText().toString());
                jsonObject.put("ApeMaterno", etApeMaterno.getText().toString());
                jsonObject.put("Telefonos", etTelefonos.getText().toString());
                jsonObject.put("EstadoCivilId", ((Parametro) spEstadoCivil.getSelectedItem()).getParametroId());
                jsonObject.put("CodigoUsuarioCreacion", Util.BE_DatosUsuario.getCodigoUsuario());
                jsonObject.put("Correo", etCorreo.getText().toString());
                jsonObject.put("Direccion", etDireccion.getText().toString());
                jsonObject.put("Referencia", etReferencia.getText().toString());
                jsonObject.put("Ubigeo", ((Distrito) spDistrito.getSelectedItem()).getCodUbigeo());
                jsonObject.put("CargoId", Util.BE_DatosUsuario.getCargoId());
                jsonObject.put("Obra", etObra.getText().toString());
                jsonObject.put("IdSupervisor", provLocal.getIdSupervisor());
                stringEntity=new StringEntity(jsonObject.toString());



            }
            catch(JSONException e){
                e.printStackTrace();

            }
            catch(UnsupportedEncodingException e){
                e.printStackTrace();

            }
            return new RestClient().post("Persona.svc/Persona", stringEntity, 10000);


        }
    }


    private void LimpiarCampos() {

        etNombres.setText("");
        etApePaterno.setText("");
        etApeMaterno.setText("");
        etDNI.setText("");
        etDireccion.setText("");
        etReferencia.setText("");
        etTelefonos.setText("");
        atEstablecimientos.setText("");
        etObra.setText("");
        etCorreo.setText("");
    }


    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home: // ID del boton
                finish(); // con finish terminamos el activity actual, con lo que volvemos
                // al activity anterior (si el anterior no ha sido cerrado)
                return true;
        }
        return super.onOptionsItemSelected(item);
    }


    private void cargarEstablecimientos() {
        PreExecuteCallback pre = new PreExecuteCallback() {
            @Override
            public void execute() {
                Toast.makeText(RegContactoActivity.this, "Cargando Establecimientos...", Toast.LENGTH_SHORT).show();
            }
        };
        PostExecuteCallback post = new PostExecuteCallback() {
            @Override
            public void execute(String result) {
                lstProveedorLocal = new Gson().fromJson(result, ListProveedorLocal.class);

                ArrayAdapter<ProveedorLocal> dataAdapter = new ArrayAdapter<ProveedorLocal>
                        (RegContactoActivity.this, android.R.layout.simple_spinner_item, lstProveedorLocal.getLista());

                //dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                atEstablecimientos.setThreshold(1);
                atEstablecimientos.setAdapter(dataAdapter);
                /*DistritoSpinnerAdapter distritoSpinnerAdapter = new DistritoSpinnerAdapter(AgregarLocalActivity.this, 0, lista.getLista());
                spDistrito.setAdapter(distritoSpinnerAdapter);*/
            }
        };
        RestTask requestTask = new RestTask(pre, post);
        requestTask.execute(Util.Direccion_WCF + "ProveedorLocal.svc/ProveedorLocal?cargoid=0&empleadoid=0&localid=0&nombreproveedor=");
    }

    private void cargarDistritos() {
        PreExecuteCallback pre = new PreExecuteCallback() {
            @Override
            public void execute() {
                Toast.makeText(RegContactoActivity.this, "Cargando distritos...", Toast.LENGTH_SHORT).show();
            }
        };
        PostExecuteCallback post = new PostExecuteCallback() {
            @Override
            public void execute(String result) {
                ListDistrito lista = new Gson().fromJson(result, ListDistrito.class);
                ArrayAdapter<Distrito> dataAdapter = new ArrayAdapter<Distrito>
                        (RegContactoActivity.this, android.R.layout.simple_spinner_item, lista.getLista());

                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spDistrito.setAdapter(dataAdapter);
                /*DistritoSpinnerAdapter distritoSpinnerAdapter = new DistritoSpinnerAdapter(AgregarLocalActivity.this, 0, lista.getLista());
                spDistrito.setAdapter(distritoSpinnerAdapter);*/
            }
        };
        RestTask requestTask = new RestTask(pre, post);
        requestTask.execute(Util.Direccion_WCF + "Ubigeo.svc/Ubigeo?coddepa=15&codprov=01");
    }

    private void cargarEstadoCivil() {
        PreExecuteCallback pre = new PreExecuteCallback() {
            @Override
            public void execute() {
                Toast.makeText(RegContactoActivity.this, "Cargando Estado Civil...", Toast.LENGTH_SHORT).show();
            }
        };

        PostExecuteCallback post = new PostExecuteCallback() {
            @Override
            public void execute(String result) {
                ListParametro lista = new Gson().fromJson(result, ListParametro.class);
                ArrayAdapter<Parametro> dataAdapter = new ArrayAdapter<Parametro>
                        (RegContactoActivity.this, android.R.layout.simple_spinner_item, lista.getLista());

                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spEstadoCivil.setAdapter(dataAdapter);

              /*  MainSpinnerAdapter dataAdapter = new MainSpinnerAdapter(RegContactoActivity.this, 0, lista.getLista());
                spDistrito.setAdapter(dataAdapter);*/
            }
        };


        RestTask requestTask = new RestTask(pre, post);
        requestTask.execute(Util.Direccion_WCF + "parametro.svc/parametro/8");
    }

    @Override
    public void onConfirmacionOK() {

    }


      /*
      Metodos en SOAP


    private Boolean CargarEstadoCivil() {
        try {

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("i", "8");

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);


            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapObject resSoap = (SoapObject) envelope.getResponse();
            ArrayList<Parametro> lista = new ArrayList<Parametro>();

            int nPropiedades = resSoap.getPropertyCount();
            for (int i = 0; i < nPropiedades; i++) {
                SoapObject ic = (SoapObject) resSoap.getProperty(i);


                lista.add(new Parametro(Integer.parseInt(ic.getProperty("_ParametroId").toString())
                        , ic.getProperty("_NombreCorto").toString()));
            }

            msAdapterEstadoCivil = new MainSpinnerAdapter(this, 0, lista);

            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

*/



   /*
    private Boolean CargarDistritos() {
        try {

            METHOD_NAME = "ListarDistritos";
            NAMESPACE = "http://tempuri.org/";
            URL = "http://www.hatunsol.com.pe/WS_Hatun/Ubigeo.svc";
            SOAP_ACTION = "http://tempuri.org/IUbigeo/ListarDistritos";

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("coddepa", "15");
            request.addProperty("codprov", "01");

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);


            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapObject resSoap = (SoapObject) envelope.getResponse();

            ArrayList<Parametro> lista = new ArrayList<Parametro>();

            int nPropiedades = resSoap.getPropertyCount();
            for (int i = 0; i < nPropiedades; i++) {
                SoapObject ic = (SoapObject) resSoap.getProperty(i);
                lista.add(new Parametro(Integer.parseInt(ic.getProperty("_CodUbigeo").toString())
                        , ic.getProperty("_Nombre").toString()));
            }

            msAdapterDistrito = new MainSpinnerAdapter(this, 0, lista);
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;

        }


    }*/


}

